// From
// 
//==========================================
// Matt Pietrek
// Microsoft Systems Journal, Feb 1997
// FILE: MEMORYMAPPEDFILE.H
//==========================================
#ifndef __MEMMAPFL_H__
#define __MEMMAPFL_H__

enum errMMF
{   errMMF_NoError,		errMMF_FileOpen,
    errMMF_FileMapping, errMMF_MapView
};

class MEMORY_MAPPED_FILE
{
public:
    MEMORY_MAPPED_FILE(LPCTSTR pszFileName );
    ~MEMORY_MAPPED_FILE(void);
    
    PVOID   GetBase( void )
	{ 
		return m_pMemoryMappedFileBase; 
	}
    DWORD   GetFileSize( void )
	{ 
		return m_cbFile; 
	}
    BOOL    IsValid( void ) 
	{ 
		return errMMF_NoError == m_errCode; 
	} 
    errMMF  GetErrorType()
	{ 
		return m_errCode; 
	}

private:
    HANDLE      m_hFile;
    HANDLE      m_hFileMapping; // Handle of memory mapped file
    PVOID       m_pMemoryMappedFileBase;
    DWORD       m_cbFile;
    errMMF      m_errCode;  
};

typedef MEMORY_MAPPED_FILE *PMEMORY_MAPPED_FILE;

#endif
